package com.ruoyi.lxgl.kylx.service;

import java.util.List;
import java.util.Map;

import com.ruoyi.lxgl.kylx.domain.LlglXmsb;
import com.ruoyi.lxgl.kylx.domain.LxglXmsbFj;
import com.ruoyi.lxgl.kylx.domain.LxglXmsbJhjd;

/**
 * 项目申报Service接口
 *
 * @author huacai
 * @date 2024-03-14
 */
public interface ILlglXmsbService
{
    /**
     * 查询项目申报
     *
     * @param xmsbId 项目申报主键
     * @return 项目申报
     */
    public LlglXmsb selectLlglXmsbByXmsbId(Integer xmsbId);

    /**
     * 获取项目申报与项目计划进度和目标详细信息
     * @param xmsbId 项目申报主键
     * @return 项目申报
     */
    LlglXmsb selectLlglXmsbByjhjdByXmsbId(Integer xmsbId);

    /**
     * 获取项目申报与研发费用预算上信息信息
     * @param xmsbId
     * @return
     */
    LlglXmsb selectLlglXmsbByyffyByXmsbId(Integer xmsbId);

    /**
     * 查询项目申报列表
     *
     * @param llglXmsb 项目申报
     * @return 项目申报集合
     */
    public List<LlglXmsb> selectLlglXmsbList(LlglXmsb llglXmsb);

    /**
     * 查询项目申报列表 (项目申报页面使用)
     * @param llglXmsb
     * @return
     */
    List<LlglXmsb> getXmsbList(LlglXmsb llglXmsb);

    /**
     * 新增项目申报
     *
     * @param llglXmsb 项目申报
     * @return 结果
     */
    public int insertLlglXmsb(LlglXmsb llglXmsb);

    /**
     * 批量新增项目申报
     *
     * @param llglXmsbs 项目申报List
     * @return 结果
     */
    public int batchInsertLlglXmsb(List<LlglXmsb> llglXmsbs);

    /**
     * 修改项目申报
     *
     * @param llglXmsb 项目申报
     * @return 结果
     */
    public int updateLlglXmsb(LlglXmsb llglXmsb);

    /**
     * 批量删除项目申报
     *
     * @param xmsbIds 需要删除的项目申报主键集合
     * @return 结果
     */
    public int deleteLlglXmsbByXmsbIds(Integer[] xmsbIds);

    /**
     * 删除项目申报信息
     *
     * @param xmsbId 项目申报主键
     * @return 结果
     */
    public int deleteLlglXmsbByXmsbId(Integer xmsbId);

    /**
     * 新增附件
     * @param lxglXmsbFj 附件
     * @return 结果
     */
    int insertLxglXmsbFjByxmsbId(LxglXmsbFj lxglXmsbFj);

    /**
     * 根据主表ID查询附件列表
     * @param lxglXmsbFj 附件
     * @return 结果
     */
    public List<LxglXmsbFj> selectLxglXmsbFjList(LxglXmsbFj lxglXmsbFj);

    /**
     * 删除附件
     *
     * @param fjId 附件主键
     * @return 结果
     */
    public int deleteLxglXmsbFjByFjId(Integer fjId);

    /**
     * 查询当前最新的主表主键ID
     * @return 当前最新的主表主键ID
     */
    int selectMAXId();

    /**
     * 获取 计划进度表 最大和最小 排列序号
     * @return
     */
    public Map<String, Integer> getJhjdMaxAndMinNum(Integer xmsbId);

    /**
     * 按序号获取 计划进度表
     * @return
     */
    public List<LxglXmsbJhjd> getJhjdList(Integer xmsbId);

    /**
     * 修改项目计划进度和目标
     *
     * @param lxglXmsbJhjd 项目计划进度和目标
     * @return 结果
     */
    public int updateLxglXmsbJhjd(LxglXmsbJhjd lxglXmsbJhjd);

    /**
     * 获取项目申报与研发费用预算下信息信息
     * @param xmsbId
     * @return
     */
    LlglXmsb selectLlglXmsbByyffysByXmsbId(Integer xmsbId);

    /**
     * 获取项目申报与研发费用研发材料
     * @param xmsbId
     * @return
     */
    LlglXmsb selectLlglXmsbByYfclByXmsbId(Integer xmsbId);

    /**
     * 获取项目申报与研发费用研发材料
     * @param xmsbId
     * @return
     */
    LlglXmsb selectLlglXmsbYfsbByXmsbId(Integer xmsbId);

    /**
     * 获取项目申报与研发费用中间试验费
     * @param xmsbId
     * @return
     */
    LlglXmsb selectLlglXmsbZjsyfByXmsbId(Integer xmsbId);

    /**
     * 获取项目申报与课题组成人员
     * @param xmsbId
     * @return
     */
    LlglXmsb selectLlglXmsbZcryByXmsbId(Integer xmsbId);

    /**
     * 课题归属转换
     * @param llglXmsb
     * @return
     */
    public int updateKtgs(LlglXmsb llglXmsb);

    /**
     * 根据项目所属的部门ID查询它的顶级ID (非100)(分局ID)
     * @param xmDeptId
     * @return
     */
    Integer selectDjIdByXmDeptId(Integer xmDeptId);
}
